package com.dfcd.commonlib.retrofit.rxbus;

import rx.Observable;
import rx.subjects.PublishSubject;
import rx.subjects.SerializedSubject;
import rx.subjects.Subject;

/**
 * 一个rxjava 的自定义广播 可以替换Otto
 *
 * @author zengyi
 * create at 2017/1/24 16:45
 */
public class RxBus {

	private static volatile RxBus mInstance;

	private final Subject<Object, Object> bus;

	// PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者
	public RxBus() {
		bus = new SerializedSubject<>(PublishSubject.create());
	}

	// 单例RxBus
	public static RxBus getInstance() {
		if (mInstance == null) {
			synchronized (RxBus.class) {
				if (mInstance == null) {
					mInstance = new RxBus();
				}
			}
		}
		return mInstance;
	}

	// 发送一个新的事件
	public void post(Object o) {
		bus.onNext(o);
	}

	// 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者
	public <T> Observable<T> toObservable(Class<T> eventType) {
		return bus.ofType(eventType);

	}


}